package com.webserver.core;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 作者：JustOne
 * 微信：Andylau2020smile
 * 抖音：JustOne2018
 * 日期：2022/6/12 15:47
 */
public class WebServerApplication {
    public static Class wsaClazz; //这个属性 是"启动Boot项目的类" 所对应的类对象
    private ServerSocket serverSocket;//相当于总机
    private ExecutorService threadPool;//线程池 //之前学过，Executor(一克色克ter)是执行器的意思，


    ////////构造方法，为总机赋值
    public WebServerApplication(){
        try {
            System.out.println("正在启动V24服务端...");
            serverSocket = new ServerSocket(8088);
            threadPool = Executors.newFixedThreadPool(50);
            System.out.println("服务端启动完毕！！！");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    ////////action()方法
    public void action(){
        try {
            while (true) {
                System.out.println("等待客户端连接...");
                Socket socket = serverSocket.accept();
                System.out.println("一个客户端连接到了V24");

                //启动一个线程来与该客户端交互
                MyClientHandler handler = new MyClientHandler(socket);
                //把任务交给线程池
                threadPool.execute(handler);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    ////////原来的 主方法
    //使用我们的Boot也有一个约定，就是该项目中所有的Controller都必须在名为controller的包里，并且这个
    //包要放在启动Boot项目的类所在的包里。
    //参数clazz 是"启动Boot项目的类" 所对应的类对象
    public static void run(Class clazz, String[] args) {
        WebServerApplication.wsaClazz = clazz;//是"启动Boot项目的类" 所对应的类对象
        WebServerApplication application = new WebServerApplication();
        application.action();
    }
}
